/*
 * @Descripttion: 实现冒泡排序
 * @Author: yubo
 * @Date: 2022-11-08 15:46:07
 * @LastEditTime: 2022-11-08 15:48:59
 */
//函数参数为可变借用
fn bubble_sort(a: &mut Vec<i32>) {
    let mut n = a.len();    //获取数组长度
    while n > 0 {
        //初始化遍历游标，max_ptr始终指向最大值
        let (mut i, mut max_ptr) = (1, 0);
        //冒泡开始，如果前者大于后者，则交换位置，并设置当前最大值游标
        while i < n {
            if a[i-1] > a[i] {
                a.swap(i-1, i);
                max_ptr = i;
            }
            i += 1;
        }

        //本次遍历的最大值位置也是下一轮冒泡的终点
        n = max_ptr
    }
}

fn main() {
    let mut a = vec![1,4,5,2,3];
    bubble_sort(&mut a);
    println!("{:?}", a);
}